import os,pickle

def File(file,mode,*args):
    '''
    pickle提供简单的持久化功能，将对象以文件形式存放在磁盘上
    :param file: 用户注册生成的数据文件.db
    :param mode:对数据文件的各种操作
    :param args: 写入的数据信息
    :return: 返回数据文件的信息
    '''
    if mode == 'rb':
        with open(file,mode) as f:
            #反序列化对象，解析文件中的数据
            da = pickle.load(f)
    elif mode == 'wb':
        da = args[0]
        with open(file,mode) as f:
            #序列化对象，将结果数据流写入文件对象
            pickle.dump(da,f)
            return da

def user(name,passwd,mode):
    '''
    用户注册和登录
    :param name: 用户名
    :param passwd: 用户密码
    :param mode: 注册和登录模式
    :return: 登陆成功返回用户信息，反之则None
    '''
    db_file = name + '.db'
    #登录
    if mode == 'login':
        if os.path.isfile(db_file):
            dict_user = File(db_file,'rb')
            if dict_user['name'] == user and dict_user['passwd'] == passwd:
                print("登陆成功")
                return dict_user
    #注册
    elif mode == 'reg':
        if not os.path.isfile(db_file):
            user_info = {'name': name, 'passwd': passwd, 'stat': 0}
            File(db_file, 'wb', user_info)
            print('注册成功')
        else:
            print("用户已存在，请登录")

def shopping(goods,shopping_car):
    '''
    :param goods: 商品信息
    :param shopping_car: 购物车
    '''
    global budget
    #商品列表
    goods = [{'name': '苹果', 'price': '4'}, {'name': '牛奶', 'price': '5'}, {'name': '打火机', 'price': '1'},
             {'name': '香烟', 'price': '10'}, {'name': '矿泉水', 'price': '2'}, {'name': '面包', 'price': '6'}]
    while True:
        print("商品列表".center(50,'*'))
        for i,j in enumerate(goods):
            print("序号：%s\n商品名：%s\n价格：%s"%(i,j['name'],j['price']))
        choice = input("请输入想要的商品序号[t 查看购物清单 q 退出]：").strip()
        if not choice:
            continue
        #大小写q都能退出
        if choice.upper() == 'Q':
            break
        #将用户选择的商品生成字典
        good_dict = {'name':goods[int(choice)]['name'],'total_price':goods[int(choice)]['price']}
        #获取用户余额
        balance = int(budget) - int(good_dict['total_price'])
        if balance < 0:
            print("您当前购物车价格超出预算金额!")
        else:
            print("购买成功!")
            print("购物车".center(50,'*'))
        for i in shopping_car:
            print('商品名：%s\n单价：%d\n总价：%d元'%(i['name'],i['price'],i['total_price']))
        print("您的余额为：%d元"%(balance))
        print('*'*20)

def main():
    global user_dict
    print("欢迎来到三乐购物系统")
    while True:
        print('1.注册\n2.登录\n3.退出')
        choice = input("请选择您的操作：")
        if not choice:
            continue
        if choice == '1' or '2' or '3':
            if choice == '1':
                name = input("请输入您的用户名：").strip()
                passwd = input("请输入您的密码：").strip()
                user(name, passwd, 'reg')
            elif choice == '2':
                name = input("请输入用户名：").strip()
                passwd = input("请输入密码：").strip()
                if user_dict is None:
                    continue
                if user_dict['stat'] == 0:
                    budget = input("首次登陆，请充值：").strip()
                    if budget.isdigit():
                        if int(budget) <= 0:
                            print("请输入正确的购物预算金额!")
                        else:
                            user_dict['stat'] = 1
                            print("充值成功")
                    else:
                        print("请输入正确的购物预算金额!")
            elif choice == '3':
                break
        else:
            print("请重新选择!")


if __name__ == '__name__':
    main()
